package com.divemotor.ventarepuestosinternet.dao.impl;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.divemotor.ventarepuestosinternet.dao.DepartamentoDAO;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.model.Departamento;
import com.divemotor.ventarepuestosinternet.model.Pais;


@Repository (value = "depatarmentoDAO")
public class DepartamentoDAOImpl implements DepartamentoDAO , Serializable {

	private static final long serialVersionUID = 4722058192959045522L;
	
	@Autowired
	private SessionFactory sessionfactory;

	public SessionFactory getSessionFactory() {
		return sessionfactory;
	}

	public void setSessionfactory(SessionFactory sessionfactory) {
		this.sessionfactory = sessionfactory;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Departamento> listarDepartamentoPorPais(
			Departamento departamento) throws DivemotorBusinessException {
		
		return getSessionFactory()
				.getCurrentSession()
				.createQuery(
						"from Departamento d where d.pais.idPais = :codIdPais ")
				.setParameter("codIdPais", departamento.getPais().getIdPais())
				.list();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Departamento> listarDepartamentoPorPaisActual(Pais pais) {
		Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Departamento.class, "departamento");
		criteria.createAlias("departamento.pais", "pais");
		criteria.add(Restrictions.eq("departamento.pais", pais));
		
		 List<Departamento> L =criteria.list();
		 L.size();
		
		return L;
	}

	@Override
	public Departamento obtenerPorCodigoId(Departamento departamento) {
		return  (Departamento) getSessionFactory().getCurrentSession().createQuery(
						"from Departamento d where d.idDepartamento = :idDepartamento")
				.setParameter("idDepartamento", departamento.getIdDepartamento()).uniqueResult();
	}

}
